// https://www.acwing.com/problem/content/804/

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

// 定义数组的最大大小，确保能够存储足够的数据
constexpr int MAX_ARRAY_SIZE = 300010;

// 原始数组，用于存储离散化后的数值
int arr1[MAX_ARRAY_SIZE]; // 用于存储差分数组的值
int arr2[MAX_ARRAY_SIZE]; // 用于存储前缀和数组

/**
 * 使用二分查找在去重并排序的数组 alls 中找到 >= x 的最小位置
 * @param x: 要查找的值
 * @return 对应值在 alls 中的位置（从 1 开始）
 */
int find(vector<int>& alls, const int x) {
    int left = 0;
    int right = static_cast<int>(alls.size() - 1);
    while (left < right) {
        const int mid = (left + right) / 2;
        if (alls[mid] >= x) {
            right = mid; // 缩小右边界
        } else {
            left = mid + 1; // 增大左边界
        }
    }
    return right + 1; // 返回 1 基下标，方便后续前缀和计算
}

int main() {
    int m, n;
    cin >> m >> n;

    // 存储增加操作的容器，每个元素是一个 pair，其中 first 是下标，second 是对应的值
    vector<pair<int, int>> add(m);
    // 存储所有需要离散化的数值的容器
    vector<int> alls;

    // 1. 读取增加操作的数据
    for (int i = 0; i < m; i++) {
        int x, c;
        cin >> x >> c; // x 是下标，c 是增加的值
        add[i].first = x;
        add[i].second = c;
        alls.push_back(x); // 将下标加入 alls 容器，供后续离散化
    }

    // 存储查询操作的容器，每个元素是一个 pair，其中 first 和 second 是区间的左右端点
    vector<pair<int, int>> queries(n);
    // 2. 读取查询操作的数据
    for (int i = 0; i < n; i++) {
        int left, right;
        cin >> left >> right; // left 和 right 是查询的区间端点
        queries[i].first = left;
        queries[i].second = right;
        alls.push_back(left); // 将区间端点加入 alls 容器
        alls.push_back(right);
    }

    // 3. 对 alls 进行排序并去重，完成离散化
    sort(alls.begin(), alls.end());
    alls.erase(unique(alls.begin(), alls.end()), alls.end());

    // 4. 将增加操作应用到差分数组 arr1
    for (const auto [first, second] : add) {
        const int x = find(alls, first); // 找到 x 在离散化后的下标
        arr1[x] += second; // 将对应的值添加到差分数组中
    }

    // 5. 计算前缀和数组 arr2
    for (int i = 1; i <= alls.size(); i++) {
        arr2[i] = arr2[i - 1] + arr1[i];
    }

    // 6. 处理查询操作
    for (const auto [first, second] : queries) {
        const int left = find(alls, first); // 找到查询区间左端点在离散化后的下标
        const int right = find(alls, second); // 找到查询区间右端点在离散化后的下标
        // 利用前缀和计算区间 [left, right] 的和
        cout << arr2[right] - arr2[left - 1] << endl;
    }

    return 0;
}
